// 这里用来配置axios

import axios from 'axios'
import auth from '@/utils/auth'
import router from '@/router';
// 最大安全整数json转换
import JSONbig from 'json-bigint'

// 基准路径,是线上地址
axios.defaults.baseURL = 'http://ttapi.research.itcast.cn/mp/v1_0'

// 请求头,追加token,这样写有bug
// axios.defaults.headers.Authorization = `Bearer ${auth.getUser().token}`

// 配置响应数据转换方式
axios.defaults.transformResponse = [(data) => {
  // data是原始数据格式,json字符串
  try {
    return JSONbig.parse(data)
  } catch (e) {
    // 转换不成功时还是返回原来的
    return data
  }
}]

// 请求拦截器
axios.interceptors.request.use(function (config) {
  // 在发送请求之前
  // 获取本地token,并追加到请求头
  const token = auth.getUser().token
  if (token) config.headers.Authorization = `Bearer ${token}`
  return config;
}, function (error) {
  // 请求错误时
  return Promise.reject(error);
});

// 响应拦截器
axios.interceptors.response.use(function (res) {
  // 对响应数据的处理
  return res
}, function (err) {
  // 如果token失效就拦截
  // err.response响应报文对象
  // err.response.status响应状态码
  if (err.response && err.response.status === 401) {
    // token失效,跳转到登录页重新登陆
    // router也能调用push进行跳转
    router.push('/login')
  }
  // 对响应错误的处理
  return Promise.reject(err);
});


// 导出配置完成的axios
export default axios
